package com.qijian.common.utils.mybatis;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author supo
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface WhereType {
    /**
     * <p>
     * 查询类型
     * </p>
     */
    WhereTypeEnum type() default WhereTypeEnum.EQ;

    /**
     * 表名
     *
     * @return /
     */
    String tableName() default "";

    /**
     * 表名
     *
     * @return /
     */
    String deptTableName() default "";

    /**
     * 表名
     *
     * @return /
     */
    String userTableName() default "";

    /**
     * 判定字段名
     *
     * @return /
     */
    String filed() default "";

    /**
     * 是否忽略
     */
    boolean ignore() default false;

    WhereTypeEnum sortType() default WhereTypeEnum.DESC;

    boolean sort() default false;

    boolean dateFormat() default false;

    boolean andNew() default false;

    /**
     * 组合or条件分组：and(1=1 or 2=2)
     *
     * @return
     */
    String orGroup() default "";

    /**
     * 添加group by 条件
     *
     * @return /
     */
    boolean groupBy() default false;

    /**
     * 通用函数解析 <br>
     * find_in_set示例: find_in_set({1},{2}) <br>
     * <p>
     * date_format示例:<br>
     * date_format('1992-01-01 11:11:11','%Y-%m-%d') <br>
     * date_format({1},'%Y-%m-%d') <br>
     * date_format({2},'%Y-%m-%d') <br>
     * </p>
     * {1}: 属性的值 <br>
     * {2}: 属性列名
     *
     * @return /
     */
    String func() default "";

    boolean isHaving() default false;

    /**
     * 目前配合func使用，FieldType为Boolean，true 取第一个值，false 取第二个值
     *
     * @return
     */
    String[] func_value_conversion() default {};

    /**
     * 指定多个列名，用or拼接，建议格式：表名.列名（tableName.tableField）
     *
     * @return
     */
    String[] fields() default {};

    /**
     * JSON内的key
     * 指定后则以JSON形式取值
     *
     * @return
     */

    String jsonKey() default "";


    /**
     * 指定多个值对应,使用只要不为空就行
     * @return
     */
    String[] func_field_value() default {};

}
